#ifndef AGENTW_PLANNING
#define AGENTW_PLANNING

List<FeatureTerm> *IDSearchBasedPlan(List<FeatureTerm> *objects,FeatureTerm *initialState,FeatureTerm *goalState,FTKBase *domain_model,Ontology *o);
List<FeatureTerm> *HSearchBasedPlan(List<FeatureTerm> *objects,FeatureTerm *initialState,FeatureTerm *goalState,FTKBase *domain_model,Ontology *o);


List<FeatureTerm> *validInstantiations(FTKBase *dm,List<FeatureTerm> *objects,FeatureTerm *state);
List<FeatureTerm> *validInstantiations(FeatureTerm *op,List<FeatureTerm> *objects,FeatureTerm *state,FTKBase *dm);
bool validOperatorInstantiation(FeatureTerm *op,FeatureTerm *state,FTKBase *dm);
bool evaluatePredicate(FeatureTerm *predicate,FeatureTerm *state,FTKBase *dm);
FeatureTerm *applyOperator(FeatureTerm *op,FeatureTerm *state,FTKBase *dm);
List<FeatureTerm> *getUnsatisfiedPredicates(FeatureTerm *state,FeatureTerm *goal,FTKBase *dm);

void printOperatorNice(FeatureTerm *op,FTKBase *dm);


void initPlanning(Ontology *o);

extern Sort *and_sort,*or_sort,*not_sort,*when_sort,*unless_sort,*if_sort,*operator_sort;

#endif
